﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestionePolveriLib.Facades;
using FrameworkLib.Utilities;
using GestionePolveriLib.BL;
using GestionePolveriLib.Utilities;

namespace GestionePolveri2
{
    public partial class VerniciatoreSceltaTurnoDialog : Form
    {
        private Turno m_turno = null;
        private Impianto m_impianto = null;
        private Impianto m_impiantoFitt = null;
        private bool m_annullaChiusura = false;

        public Turno Turno
        {
            get { return m_turno; }
            set { m_turno = value; }
        }

        public Impianto Impianto
        {
            get { return m_impianto; }
            set { m_impianto = value; }
        }

        public Impianto ImpiantoFitt
        {
            get { return m_impiantoFitt; }
            set { m_impiantoFitt = value; }
        }

        public VerniciatoreSceltaTurnoDialog()
        {
            InitializeComponent();

            AddComboTurni();
            AddComboImpianti();
            AddComboImpiantiFittizi();

            this.cmbTurni.SelectedIndexChanged += new EventHandler(cmbTurni_SelectedIndexChanged);
            this.cmbImpianti.SelectedIndexChanged += new EventHandler(cmbImpianti_SelectedIndexChanged);
            this.cmbImpiantiFitt.SelectedIndexChanged += new EventHandler(cmbImpiantiFitt_SelectedIndexChanged);

            this.FormClosing += new FormClosingEventHandler(VerniciatoreSceltaTurnoDialog_FormClosing);
        }

        void VerniciatoreSceltaTurnoDialog_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (this.DialogResult != System.Windows.Forms.DialogResult.Abort)
            {
                if ((this.Turno == null) && ((this.Impianto == null) || (this.ImpiantoFitt == null)))
                {
                    //MessageBox.Show("Selezionare Turno e Impianto !", "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    m_annullaChiusura = true;
                }
            }

            e.Cancel = m_annullaChiusura;
        }

        void cmbImpiantiFitt_SelectedIndexChanged(object sender, EventArgs e)
        {
            m_impiantoFitt = (Impianto)this.cmbImpiantiFitt.SelectedItem;

            this.cmbImpianti.Enabled = (m_impiantoFitt.Nome.ToLower().Contains("seleziona") ? true : false);
        }

        void cmbImpianti_SelectedIndexChanged(object sender, EventArgs e)
        {
            m_impianto = (Impianto)this.cmbImpianti.SelectedItem;

            this.cmbImpiantiFitt.Enabled = (m_impianto.Nome.ToLower().Contains("seleziona") ? true : false);
        }

        void cmbTurni_SelectedIndexChanged(object sender, EventArgs e)
        {
            m_turno = (Turno)this.cmbTurni.SelectedItem;
        }

        public void AddComboTurni()
        {
            FilterComboBoxHelper.SetupTurniComboBox(cmbTurni);
        }

        public void AddComboImpianti()
        {
            FilterComboBoxHelper.SetupImpiantiComboBox(cmbImpianti);
        }

        public void AddComboImpiantiFittizi()
        {
            FilterComboBoxHelper.SetupImpiantiFittiziComboBox(cmbImpiantiFitt);
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                if (((this.Turno == null) && ((this.Impianto == null) || (this.ImpiantoFitt == null))) ||
                    ((this.Turno.Id == -1) && ((this.Impianto.ID == -1) || (this.ImpiantoFitt.ID == -1))))
                {
                    MessageBox.Show("Selezionare Turno e Impianto !", "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    m_annullaChiusura = true;
                }
                else
                {
                    int m_impiantoID = ((this.Impianto != null) ? this.Impianto.ID : this.ImpiantoFitt.ID);

                    System.Security.Principal.IPrincipal m_operatore = System.Threading.Thread.CurrentPrincipal;
                    OperatoriFacade opf = new OperatoriFacade();
                    Operatore m_op = opf.GetOperatore(m_operatore.Identity.Name);

                    ControlloAccessoVerniciatoriFacade cavf = new ControlloAccessoVerniciatoriFacade();

                    ControlloAccessoVerniciatore m_cav = cavf.CheckBlocked(this.Turno.Id, m_impiantoID);
                    if (m_cav == null)
                    {
                        cavf.Block(this.Turno.Id, m_impiantoID, m_op.ID);
                        m_annullaChiusura = false;
                    }
                    else
                    {
                        if (m_cav.IsBlocked)
                        {
                            if (m_cav.IDOperatore != m_op.ID)
                            {
                                Operatore m_op1 = opf.GetOperatore(m_cav.IDOperatore);
                                string msg = string.Format("Combinazione Turn/Impianto già utilizzata dal verniciatore: {0}!", m_op1.UserName);
                                MessageBox.Show(msg, "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                                this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
                                m_annullaChiusura = true;
                            }
                            else
                            {
                                m_annullaChiusura = false;
                            }
                        }
                        else
                        {
                            cavf.Block(this.Turno.Id, m_impiantoID, m_op.ID);
                            m_annullaChiusura = false;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }

        private void btnEsci_Click(object sender, EventArgs e)
        {
            m_annullaChiusura = false;
            this.DialogResult = System.Windows.Forms.DialogResult.Abort;
        }
    }
}
